package com.ms.service.module.common.timer;

import java.lang.reflect.Method;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.xpec.c4.game.utility.GameUtility;
import com.xpec.c4.service.module.task.TaskTimer;

/**
 * 觸發後會呼叫指定的 callback method 的 timer
 * 
 * @author TW15010
 */
public class UpdateTaskTimer2 extends TaskTimer {
	/** log4j object */
	private static final Log log = LogFactory.getLog(UpdateTaskTimer2.class);

	/** 觸發後呼叫的方法所在的 class */
	private Object classOfMethod;

	/** 觸發後呼叫的方法 */
	private Method method;

	/**
	 * @param classOfMethod
	 *            時間到要觸發的 callback 所在的 class
	 * @param methodName
	 *            時間道後要觸發的 callback name<br>
	 *            callback 格式參考 {@link #callbackExample()}
	 */
	public UpdateTaskTimer2(Object classOfMethod, String methodName) {
		super();
		if (classOfMethod == null) {
			return;
		}

		this.classOfMethod = classOfMethod;

		if (GameUtility.isHaveString(methodName)) {
			try {
				method = classOfMethod.getClass().getMethod(methodName, new Class[] {});
			} catch (Exception e) {
				if (log.isErrorEnabled()) {
					log.error("UpdateTaskTimer()", e);
				}
			}
		} else {
			method = null;
		}
	}

	/**
	 * callback method 的格式範例
	 */
	public void callbackExample() {
	}

	@Override
	public void execute() {
		if (classOfMethod == null) {
			return;
		}

		if (method == null) {
			return;
		}

		try {
			method.invoke(classOfMethod, new Object[] {});
		} catch (Exception e) {
			if (log.isErrorEnabled()) {
				log.error("UpdateTaskTimer.execute()", e);
			}
		}
	}
}
